// const Koa = require("koa2");
// const socket = require("koa-socket");
// const cors = require("koa2-cors");
const users = {}; // 保存用户
const sockS = {}; // 保存客户端对应的socket
// const io = new socket();

// // 创建一个Koa对象表示web app本身:
// const app = new Koa();
// app.use(cors())
// // 将socket与app关联
// io.attach(app);

// app._io.on("connection", (sock) => {
//   console.log("连接成功");
//   sock.on("xxx", (data) => {
//     console.log("xxx", data);
//   });

//   sock.on("join", (data) => {
//     sock.join(data.roomid, () => {
//       if (!users[data.roomid]) {
//         users[data.roomid] = [];
//       }
//       let obj = {
//         account: data.account,
//         id: sock.id,
//       };
//       let arr = users[data.roomid].filter((v) => v.account === data.account);
//       if (!arr.length) {
//         users[data.roomid].push(obj);
//       }
//       sockS[data.account] = sock;
//       app._io
//         .in(data.roomid)
//         .emit("joined", users[data.roomid], data.account, sock.id); // 发给房间内所有人
//     // sock.to(data.roomid).emit('joined',data.account);
//     });
//   });
//   sock.on("offer", (data) => {
//     // console.log('offer', data);
//     sock.to(data.roomid).emit("offer", data);
//   });
//   sock.on("answer", (data) => {
//     // console.log('answer', data);
//     sock.to(data.roomid).emit("answer", data);
//   });
//   sock.on("__ice_candidate", (data) => {
//     // console.log('__ice_candidate', data);
//     sock.to(data.roomid).emit("__ice_candidate", data);
//   });

//   // 1 v 1
//   sock.on("apply", (data) => {
//     // 转发申请
//     sockS[data.account].emit("apply", data);
//   });
//   sock.on("reply", (data) => {
//     // 转发回复
//     sockS[data.account].emit("reply", data);
//   });
//   sock.on("1v1answer", (data) => {
//     // 转发 answer
//     sockS[data.account].emit("1v1answer", data);
//   });
//   sock.on("1v1ICE", (data) => {
//     // 转发 ICE
//     sockS[data.account].emit("1v1ICE", data);
//   });
//   sock.on("1v1offer", (data) => {
//     // 转发 Offer
//     sockS[data.account].emit("1v1offer", data);
//   });
//   sock.on("1v1hangup", (data) => {
//     // 转发 hangup
//     sockS[data.account].emit("1v1hangup", data);
//   });
// });
// app._io.on("disconnect", (sock) => {
//   for (let k in users) {
//     users[k] = users[k].filter((v) => v.id !== sock.id);
//   }
//   console.log(`disconnect id => ${users}`);
// });

// // 在端口3001监听:
// let port = 3001;
// app.listen(port, (_) => {
//   console.log("app started at port ..." + port);
// });
// // https.createServer(app.callback()).listen(3001);

// 原生socket.io
const http = require("http");
const { Server } = require("socket.io");
const httpServer = http.createServer();
const io = new Server(httpServer, { cors: true }); // cors: true 解决跨域问题

// 连接
io.on("connection", (socket) => {
  // 加入房间
  socket.on("join", (data) => {
    socket.join(data.roomId);
    if (!users[data.roomId]) {
      users[data.roomId] = [];
    }
    let obj = {
      account: data.account,
      id: socket.id,
    };
    let arr = users[data.roomId].filter((v) => v.account === data.account);
    if (!arr.length) {
      users[data.roomId].push(obj);
    }
    sockS[data.account] = socket;
    // 发给房间内所有人
    io.to(data.roomId).emit(
      "joined",
      users[data.roomId],
      data.account,
      socket.id
    );
  });
  socket.on("offer", (data) => {
    // console.log('offer', data);
    io.to(data.roomId).emit("offer", data);
  });
  socket.on("answer", (data) => {
    // console.log('answer', data);
    io.to(data.roomId).emit("answer", data);
  });
  socket.on("__ice_candidate", (data) => {
    // console.log('__ice_candidate', data);
    io.to(data.roomId).emit("__ice_candidate", data);
  });
  // 断开连接
  socket.on("leave", (data) => {
    socket.leave(data.roomId);
    if (!users[data.roomId]) {
      users[data.roomId] = [];
    }
    users[data.roomId] = users[data.roomId].filter(
      (v) => v.account !== data.account
    );
    delete sockS[data.account]
    // 发给房间内所有人
    io.to(data.roomId).emit(
      "leaved",
      users[data.roomId],
      data.account,
      socket.id
    );
  });

  // 1 v 1
  // 转发申请
  socket.on("apply", (data) => {
    sockS[data.account].emit("apply", data);
  });
  // 转发回复
  socket.on("reply", (data) => {
    sockS[data.account].emit("reply", data);
  });
  // 转发 Offer
  socket.on("1v1offer", (data) => {
    sockS[data.account].emit("1v1offer", data);
  });
  // 转发 answer
  socket.on("1v1answer", (data) => {
    sockS[data.account].emit("1v1answer", data);
  });
  // 转发 ICE
  socket.on("1v1ICE", (data) => {
    sockS[data.account].emit("1v1ICE", data);
  });
  // 转发 hangup
  socket.on("1v1hangup", (data) => {
    sockS[data.account].emit("1v1hangup", data);
  });
});

httpServer.listen(3001);
